import request from '@/utils/request'

// 根据ID获取管理员信息
export function getAdminById(adminId) {
  return request({
    url: `/admin/${adminId}`,
    method: 'get'
  })
}

// 更新管理员个人信息
export function updateAdminProfile(data) {
  return request({
    url: '/admin/profile',
    method: 'put',
    data
  })
}

/**
 * 获取所有院系列表
 */
export function getAllDepartments() {
  return request({
    url: '/department',
    method: 'get'
  })
}

/**
 * 添加院系
 */
export function addDepartment(data) {
  return request({
    url: '/department',
    method: 'post',
    data
  })
}

/**
 * 更新院系信息
 * @param {string} deptNumber - 院系编号
 * @param {object} data - 院系数据
 * @returns {Promise} - 请求Promise
 */
export function updateDepartment(deptNumber, data) {
  console.log('正在更新院系:', deptNumber, data)
  return request({
    url: `/department/${deptNumber}`,
    method: 'put',
    data
  }).then(response => {
    console.log('更新院系响应:', response)
    return response
  }).catch(error => {
    console.error('更新院系失败:', error)
    throw error
  })
}

/**
 * 删除院系
 */
export function deleteDepartment(deptNumber) {
  return request({
    url: `/department/${deptNumber}`,
    method: 'delete'
  })
}

/**
 * 获取院系下的班级列表
 * @param {string} deptNumber - 院系编号
 * @returns {Promise} - 请求Promise
 */
export function getClassesByDepartment(deptNumber) {
  return request({
    url: `/class/department/${deptNumber}`,
    method: 'get'
  })
}

/**
 * 获取所有班级列表
 * @returns {Promise} - 请求Promise
 */
export function getAllClasses() {
  return request({
    url: '/class',
    method: 'get'
  })
}

/**
 * 添加班级
 * @param {object} data - 班级数据
 * @returns {Promise} - 请求Promise
 */
export function addClass(data) {
  return request({
    url: '/class',
    method: 'post',
    data
  })
}

/**
 * 删除班级
 * @param {number} classId - 班级ID
 * @returns {Promise} - 请求Promise
 */
export function deleteClass(classId) {
  return request({
    url: `/class/${classId}`,
    method: 'delete'
  })
}

/**
 * 更新班级信息
 * @param {number} classId - 班级ID
 * @param {object} data - 班级数据
 * @returns {Promise} - 请求Promise
 */
export function updateClass(classId, data) {
  return request({
    url: `/class/${classId}`,
    method: 'put',
    data
  })
}

/**
 * 获取所有教师列表
 * @returns {Promise} - 请求Promise
 */
export function getAllTeachers() {
  return request({
    url: '/teacher',
    method: 'get'
  })
}

/**
 * 根据教师工号获取教师信息
 * @param {string} teacherId - 教师工号
 * @returns {Promise} - 请求Promise
 */
export function getTeacherById(teacherId) {
  return request({
    url: `/teacher/${teacherId}`,
    method: 'get'
  })
}

/**
 * 根据院系编号获取教师列表
 * @param {string} deptNumber - 院系编号
 * @returns {Promise} - 请求Promise
 */
export function getTeachersByDepartment(deptNumber) {
  return request({
    url: `/teacher/department/${deptNumber}`,
    method: 'get'
  })
}

/**
 * 添加教师
 * @param {object} data - 教师数据
 * @returns {Promise} - 请求Promise
 */
export function addTeacher(data) {
  return request({
    url: '/teacher',
    method: 'post',
    data
  })
}

/**
 * 更新教师信息
 * @param {string} teacherId - 教师工号
 * @param {object} data - 教师数据
 * @returns {Promise} - 请求Promise
 */
export function updateTeacher(teacherId, data) {
  return request({
    url: `/teacher/${teacherId}`,
    method: 'put',
    data
  })
}

/**
 * 更新教师密码
 * @param {string} teacherId - 教师工号
 * @param {string} newPassword - 新密码
 * @returns {Promise} - 请求Promise
 */
export function updateTeacherPassword(teacherId, newPassword) {
  return request({
    url: `/teacher/${teacherId}/password`,
    method: 'put',
    data: { newPassword }
  })
}

/**
 * 删除教师
 * @param {string} teacherId - 教师工号
 * @returns {Promise} - 请求Promise
 */
export function deleteTeacher(teacherId) {
  return request({
    url: `/teacher/${teacherId}`,
    method: 'delete'
  })
}

/**
 * 搜索教师
 * @param {string} keyword - 搜索关键字
 * @returns {Promise} - 请求Promise
 */
export function searchTeachers(keyword) {
  return request({
    url: '/teacher/search',
    method: 'get',
    params: { keyword }
  })
}

/**
 * 获取所有课程
 * @returns {Promise} - 请求Promise
 */
export function getAllCourses() {
  return request({
    url: '/course',
    method: 'get'
  })
}

/**
 * 根据ID获取课程信息
 * @param {string} courseId - 课程ID
 * @returns {Promise} - 请求Promise
 */
export function getCourseById(courseId) {
  return request({
    url: `/course/${courseId}`,
    method: 'get'
  })
}

/**
 * 添加课程
 * @param {object} data - 课程数据
 * @returns {Promise} - 请求Promise
 */
export function addCourse(data) {
  return request({
    url: '/course',
    method: 'post',
    data
  })
}

/**
 * 更新课程信息
 * @param {string} courseId - 课程ID
 * @param {object} data - 课程数据
 * @returns {Promise} - 请求Promise
 */
export function updateCourse(courseId, data) {
  return request({
    url: `/course/${courseId}`,
    method: 'put',
    data
  })
}

/**
 * 删除课程
 * @param {string} courseId - 课程ID
 * @returns {Promise} - 请求Promise
 */
export function deleteCourse(courseId) {
  return request({
    url: `/course/${courseId}`,
    method: 'delete'
  })
}

/**
 * 搜索课程
 * @param {string} keyword - 搜索关键字
 * @returns {Promise} - 请求Promise
 */
export function searchCourses(keyword) {
  return request({
    url: '/course/search',
    method: 'get',
    params: { keyword }
  })
}

/**
 * 获取所有系统公告
 * @returns {Promise} - 请求Promise
 */
export function getAllAnnouncements() {
  return request({
    url: '/announcement',
    method: 'get'
  })
}

/**
 * 根据ID获取系统公告
 * @param {number} announcementId - 公告ID
 * @returns {Promise} - 请求Promise
 */
export function getAnnouncementById(announcementId) {
  return request({
    url: `/announcement/${announcementId}`,
    method: 'get'
  })
}

/**
 * 添加系统公告
 * @param {object} data - 公告数据，包含title和content
 * @returns {Promise} - 请求Promise
 */
export function addAnnouncement(data) {
  return request({
    url: '/announcement',
    method: 'post',
    data
  })
}

/**
 * 更新系统公告
 * @param {number} announcementId - 公告ID
 * @param {object} data - 公告数据，包含title和content
 * @returns {Promise} - 请求Promise
 */
export function updateAnnouncement(announcementId, data) {
  return request({
    url: `/announcement/${announcementId}`,
    method: 'put',
    data
  })
}

/**
 * 删除系统公告
 * @param {number} announcementId - 公告ID
 * @returns {Promise} - 请求Promise
 */
export function deleteAnnouncement(announcementId) {
  return request({
    url: `/announcement/${announcementId}`,
    method: 'delete'
  })
}

/**
 * 获取班级关联的所有课程
 * @param {number} classId - 班级ID
 * @returns {Promise} - 请求Promise
 */
export function getCoursesByClassId(classId) {
  return request({
    url: `/class-course/classes/${classId}/courses`,
    method: 'get',
    transformResponse: [function (data) {
      try {
        // 尝试解析响应数据
        const parsedData = JSON.parse(data);
        // 如果是标准的Result格式，直接返回
        if (parsedData.code !== undefined) {
          return parsedData;
        }
        // 如果是ResponseEntity格式，转换为Result格式
        return {
          code: 200,
          message: "获取班级课程成功",
          data: parsedData
        };
      } catch (e) {
        return {
          code: 500,
          message: "解析响应数据失败",
          data: []
        };
      }
    }]
  })
}

/**
 * 分配课程到班级
 * @param {object} data - 包含班级ID、课程ID、教师ID和学期的对象
 * @returns {Promise} - 请求Promise
 */
export function assignCourseToClass(data) {
  return request({
    url: '/class-course/assign',
    method: 'post',
    data
  })
}

/**
 * 从班级移除课程
 * @param {number} classId - 班级ID
 * @param {string} courseId - 课程ID
 * @returns {Promise} - 请求Promise
 */
export function removeCourseFromClass(classId, courseId) {
  return request({
    url: '/class-course/remove',
    method: 'delete',
    params: { classId, courseId }
  })
}

/**
 * 获取班级学生数量
 * @param {number} classId - 班级ID
 * @returns {Promise} - 请求Promise
 */
export function getStudentCountByClassId(classId) {
  return request({
    url: `/students/class/${classId}/count`,
    method: 'get'
  })
}

/**
 * 更新班级课程状态
 * @param {object} data - 包含课程ID、班级ID和状态的对象
 * @returns {Promise} - 请求Promise
 */
export function updateClassCourseStatus(data) {
  return request({
    url: `/class-course/${data.courseId}/${data.classId}/status`,
    method: 'put',
    data: { status: data.status }
  })
}
